home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / program / swags_z.zip / SCREEN.SWG / 0064_Virtual Screens.pas < prev    next >
Pascal/Delphi Source File  |  1994-05-25  |  2KB  |  60 lines

  1.  
  2. {
  3. William Schroeder wrote in a message to All:
  4.  
  5.  WS> PROCEDURE CopyScreen(First, Second, Mask: Byte);
  6.  WS> BEGIN
  7.  WS>   Move(VirtualScreen[First],VirtualScreen[Second],64000);
  8.  WS> END;
  9.  
  10. I would suggest that you use First and Second as Pointers as opposed to Bytes
  11. and pass the address of your screens.
  12.  
  13. Try this procedure and see what this does for ya.
  14.  
  15. --------------------------------------------------------------------------
  16. }
  17. Program Mask;
  18.  
  19. Var
  20.     s1, s2 : String;
  21.  
  22. Procedure CopyMask(Org, Dst: Pointer; Size: Word; Mask: Byte); Assembler;
  23. ASM
  24.       PUSH  DS
  25.       LDS   SI, Org
  26.       LES   DI, Dst
  27.       MOV   CX, Size
  28.       MOV   BL, Mask
  29. @@1:  LODSB
  30.       CMP   AL, BL
  31.       JNZ   @@2
  32.       INC   DI
  33.       JMP   @@3
  34. @@2:  STOSB
  35. @@3:  LOOP  @@1
  36.       POP   DS
  37. End;
  38.  
  39. Begin
  40.    s1 := 'Hello';
  41.    s2 := 'XXXXXXXXX';
  42.    CopyMask(@s1, @s2, 255, Byte('l'));
  43.    WriteLn(s1);
  44.    WriteLn(s2);
  45. End.
  46.  
  47. -------------------------------------------------------------------------
  48.  
  49. If you run this program, you'll notice that s1 ('Hello') is copied to s2 with
  50. the exception that 'l' was not copied giving s2 a value of 'HeXXo'.  Be
  51. carefull in using this on Pascal type strings, because byte[0] (the length
  52. byte) is also "masked".
  53.  
  54. In order for you to use this procedure for your virtual screens, you would have
  55. to call it passing the address of your screens.  Example:
  56.  
  57. CopyMask(@VirtualScreen[first], @VirtualScreen[Second], 64000, Mask);
  58.  
  59. David
  60.